package org.example.POJO.online;

import java.util.HashMap;
import java.util.Map;

public class ChatManager {
    // 存储所有聊天会话
    private final Map<String, ChatSession> chatSessions = new HashMap<>();

    /**
     * 根据提供的两个用户名创建一个新的聊天绑定。
     *
     * @param user1 第一个用户的用户名
     * @param user2 第二个用户的用户名
     */
    public void createChatBinding(String user1, String user2) {
        if (user1 == null || user2 == null || user1.isEmpty() || user2.isEmpty()) {
            throw new IllegalArgumentException("用户名不能为空");
        }

        String sessionKey = generateSessionKey(user1, user2);

        // 检查是否已经存在这个聊天会话
        if (!chatSessions.containsKey(sessionKey)) {
            // 创建新的聊天会话并添加到映射中
            ChatSession session = new ChatSession();
            chatSessions.put(sessionKey, session);
            System.out.println("创建了聊天绑定: " + sessionKey);
        } else {
            System.out.println("聊天绑定已经存在: " + sessionKey);
        }
    }

    private String generateSessionKey(String user1, String user2) {
        // 确保会话键总是按相同的顺序生成，避免重复
        if (user1.compareTo(user2) > 0) {
            return user2 + "-" + user1;
        } else {
            return user1 + "-" + user2;
        }
    }

    /**
     * 根据两个用户名获取聊天会话。
     *
     * @param user1 第一个用户的用户名
     * @param user2 第二个用户的用户名
     * @return 对应的 ChatSession 或者如果没有找到则返回 null
     */
    public ChatSession getChatSession(String user1, String user2) {
        String sessionKey = generateSessionKey(user1, user2);
        return chatSessions.get(sessionKey);
    }

    /**
     * 获取两个用户之间的聊天历史。
     *
     * @param user1 第一个用户的用户名
     * @param user2 第二个用户的用户名
     * @return 聊天历史字符串，如果不存在会话则返回空字符串
     */
    public String getChatHistory(String user1, String user2) {
        ChatSession session = getChatSession(user1, user2);
        return session != null ? session.getChatHistory() : "";
    }

    public static void main(String[] args) {
        ChatManager manager = new ChatManager();

        // 示例：创建中文用户名的聊天绑定
        manager.createChatBinding("张三", "李四");

        // 向聊天会话添加消息
        ChatSession zhangsanLisiSession = manager.getChatSession("张三", "李四");
        if (zhangsanLisiSession != null) {
            zhangsanLisiSession.addMessage("张三", "你好，李四！");
            zhangsanLisiSession.addMessage("李四", "嗨，张三！");
        }

        // 获取聊天历史，无论用户名顺序如何，应该得到相同的结果
        String chatHistory1 = manager.getChatHistory("张三", "李四");
        String chatHistory2 = manager.getChatHistory("李四", "张三");

        System.out.println("张三 和 李四 的聊天会话历史:\n" + chatHistory1);
        System.out.println("李四 和 张三 的聊天会话历史:\n" + chatHistory2);

        // 验证两个聊天历史是否相等
        System.out.println("两个聊天历史是否相等: " + chatHistory1.equals(chatHistory2));
    }
}
